/**
 * @description axios 请求封装
 * @author 赵京涛
 */
import $ from 'jquery'
import { storeToRefs } from 'pinia'
import axios from 'axios'
import { getToken } from '@/utils/auth'
import type { AxiosRequestConfig } from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus'
import { userStores } from '@/stores/modules/user'
// 是否显示重新登录
export let isRelogin: { show: boolean } = { show: false };
let baseURL
// 开发环境 或者 测试环境
if (import.meta.env.MODE === 'development' || import.meta.env.MODE === 'test') {
  baseURL = import.meta.env.VITE_BASE_API
} else if (import.meta.env.MODE === 'production') {
  // 在发布到线上时，根据页面地址的端口号动态设置 baseURL
  baseURL = `http://10.243.6.14:${window.location.port}/HeBeiHaiYangSJPJ`
}

// 创建axios实例
const service = axios.create({
  baseURL,
  timeout: 150000
})
interface myAxiosRequestConfig extends AxiosRequestConfig {
  headers: { token?: string | null };
}
// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false
    if (getToken() && !isToken) {
      config.headers['X-Token'] = getToken()
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
    }
    if (config.params) {
      const params = JSON.parse(JSON.stringify(config.params))
      for (const key in params) {
        if (typeof params[key] === 'object') {
          delete params[key]
        }
      }
      config.params = params
    }
    return config
  },
  (error) => {
    // 请求发生错误
    console.log(error)
    return Promise.reject(error)
  }
)
// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data
    if (response.status === 200) {
      if (res.status !== 0) {
        if (res.status === 20) {
          if (!isRelogin.show) {
            ElMessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
              useUserStore()
            }).catch(() => {
              isRelogin.show = false;
            });
            $('.load-warp').css('z-index', '999')
          }
        } else if (!res.status) {
          return Promise.resolve(res)
        } else {
          $('.load-warp').css('z-index', '999999999999')
          return ElMessage({
            message: res.msg || 'Error',
            type: 'error',
            duration: 5 * 1000
          })
        }
      } else {
        return Promise.resolve(res)
      }
    } else {
      return Promise.reject(new Error(res.msg))
    }
  },
  (error) => {
    ElMessage({
      message: error.message,
      type: 'error',
      duration: 5 * 1000,
      showClose: true
    })
    return Promise.reject(error)
  }
)

export default service
